/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 *
 * @author Rob
 */
@Stateless
public class GestoreArticoloBean implements GestoreArticoloBeanLocal {
    
    @EJB
    private ArticoloNuovoFacadeLocal articoloNuovoFacade;
    @EJB
    private ArticoloUsatoFacadeLocal articoloUsatoFacade;
    
    
    /**
    * Aggiunge un articolo nuovo al Database
    * @param nome nome dell'articolo
    * @param descrizioneGenerale descrizione dell'articolo
    * @param prezzo prezzo dell'articolo
    * @param disponibilita numero di pezzi disponibili
    * @param v videogame associato all'articolo
    * @param sconti percentuale di sconti
    * @param data data di inserimento
    * @param pathImmagine path dell'immagine
    * @return ArticoloNuovo articolo nuovo inserito, null altrimenti
 */ 
   @Override 
   public ArticoloNuovo aggiungiArticoloNuovo(String nome,String descrizioneGenerale,Integer prezzo,Integer disponibilita,Videogame v,Integer sconti,Date data,String pathImmagine){
        ArticoloNuovo artN = new ArticoloNuovo();
        artN.setNome(nome);
        artN.setDescrizioneGenerale(descrizioneGenerale);
        artN.setPrezzo(prezzo);
        artN.setDisponibilita(disponibilita);
        artN.setVideogioco(v);
        artN.setSconti(sconti);
        artN.setData(data);
        artN.setPathImmagine(pathImmagine);
        
        if (!articoloNuovoFacade.articoloEsistente(artN)) {
            articoloNuovoFacade.create(artN);
        }
        else {
            return null;
        }
        
        return artN;
        
    }
    
   /* Rimuove un articolo nuovo dal Database
    * @param artN articolo da rimuovere
    * @return boolean true se l'articolo viene rimosso correttamente, false altrimenti
    */ 
    @Override
    public boolean eliminaArticoloNuovo(ArticoloNuovo artN){
        try{
            articoloNuovoFacade.remove(artN);
            return true;
        }catch(Exception e){return false;}
   }
    
    /**
    * Modifica un articolo nuovo del Database
    * @param id id dell'articolo 
    * @param nome nome dell'articolo
    * @param descrizioneGenerale descrizione dell'articolo
    * @param prezzo prezzo dell'articolo
    * @param disponibilita numero di pezzi disponibili
    * @param v videogame associato all'articolo
    * @param sconti percentuale di sconti
    * @param pathImmagine path dell'immagine
    */ 
    @Override
    public void modificaArticoloNuovo(Long id,String nome,String descrizioneGenerale,Integer prezzo,Integer disponibilita,Videogame v,Integer sconti,String pathImmagine){
      
        ArticoloNuovo artN = articoloNuovoFacade.getArticoloNuovo(id);
      
        artN.setNome(nome);
        artN.setDescrizioneGenerale(descrizioneGenerale);
        artN.setPrezzo(prezzo);
        artN.setVideogioco(v);
        artN.setDisponibilita(disponibilita);
        artN.setSconti(sconti);
        artN.setPathImmagine("./img/"+pathImmagine);
        
        articoloNuovoFacade.edit(artN);
    }
    
    /**
    * Cerca un articolo nuovo nel Database
    * @param id id dell'articolo
    * @return ArticoloNuovo articolo nuovo cercato, null altrimenti
 */ 
    @Override
    public ArticoloNuovo cercaArticoloNuovo(Long id){
        return articoloNuovoFacade.getArticoloNuovo(id);
    }
  
   /**
    * Cerca tutti gli articoli nuovi nel Database
    * @return List<ArticoloNuovo> tutti gli articoli nuovi, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloNuovo> cercaArticoliNuovi(){
        return articoloNuovoFacade.getArticoliNuovi();
    }
    
   /**
    * Cerca tutti gli articoli nuovi nel Database in base ad una stringa di ricerca
    * @param articolo stringa di ricerca
    * @return List<ArticoloNuovo> tutti gli articoli nuovi restituiti dalla ricerca
    */ 
    @Override
    public List<ArticoloNuovo> cercaArticoliNuovi(String articolo){
        List<ArticoloNuovo> l = articoloNuovoFacade.findArticoliNuovi(articolo);
        return l;
    }
            
  
    /**
    * Aggiunge un articolo usato al Database
    * @param nome nome dell'articolo
    * @param descrizioneGenerale descrizione dell'articolo
    * @param prezzo prezzo dell'articolo
    * @param confermato se l'articolo è confermato oppure no
    * @param commento commento dell'articolo
    * @param utente utente proprietario dell'articolo
    * @param data data di inserimento
    * @param pathImmagine path dell'immagine
    * @return ArticoloUsato articolo usato inserito, null altrimenti
  */ 
    @Override
    public ArticoloUsato aggiungiArticoloUsato(String nome,String descrizioneGenerale,Integer prezzo,boolean confermato,String commento,Utente utente,Date data,String pathImmagine){
    
        ArticoloUsato artU = new ArticoloUsato();
        artU.setNome(nome);
        artU.setDescrizioneGenerale(descrizioneGenerale);
        artU.setPrezzo(prezzo);
        artU.setConfermato(confermato);
        artU.setCommento(commento);
        artU.setUtente(utente);
        artU.setData(data);
        artU.setPathImmagine(pathImmagine);

        if (!articoloUsatoFacade.articoloEsistente(artU)) {
            articoloUsatoFacade.create(artU);
        }
        else {
            return null;
        }
        return artU;
    }
    
   /* Rimuove un articolo usato dal Database
    * @param artU articolo da rimuovere
    * @return boolean true se l'articolo viene rimosso correttamente, false altrimenti
    */ 
   @Override
   public boolean eliminaArticoloUsato(ArticoloUsato artU){
   
        try{
            articoloUsatoFacade.remove(artU);
            return true;
        }catch(Exception e){
            return false;
        }
   }
    
    /**
    * Modifica un articolo usato del Database
    * @param id id dell'articolo 
    * @param nome nome dell'articolo
    * @param descrizioneGenerale descrizione dell'articolo
    * @param prezzo prezzo dell'articolo
    * @param confermato se l'articolo è confermato oppure no
    * @param commento commento dell'articolo
    * @param pathImmagine path dell'immagine
    * @param utente utente proprietario dell'articolo
    */ 
    @Override
    public  void modificaArticoloUsato(Long id,String nome,String descrizioneGenerale,Integer prezzo,boolean confermato,String commento,String pathImmagine,Utente utente){
        
        ArticoloUsato artU = articoloUsatoFacade.getArticoloUsato(id);
        
        artU.setNome(nome);
        artU.setDescrizioneGenerale(descrizioneGenerale);
        artU.setPrezzo(prezzo);
        artU.setConfermato(confermato);
        artU.setCommento(commento);
        artU.setPathImmagine(pathImmagine);
        artU.setUtente(utente);
        articoloUsatoFacade.edit(artU);
    }
    
    /**
    * Cerca un articolo usato nel Database dato il suo id
    * @param id id dell'articolo 
    * @return ArticoloUsato articolo usato cercato, null altrimenti
    */ 
    @Override
    public ArticoloUsato cercaArticoloUsato(Long id){
        return articoloUsatoFacade.getArticoloUsato(id);
    }
    
    /**
    * Cerca la lista degli articoli usati di un certo utente nel Database
    * @param u utente proprietario degli articoli
    * @return List<ArticoloUsato> lista degli articoli usati trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloUsato> cercaArticoliUsati(Utente u){
        return articoloUsatoFacade.getArticoliUsati(u);
    }
    
    /**
    * Cerca la lista degli articoli usati nel Database in base ad una stringa di ricerca
    * @param articolo stringa di ricerca
    * @return List<ArticoloUsato> lista degli articoli usati trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloUsato> cercaArticoliUsati(String articolo){
        return articoloUsatoFacade.findArticoliUsati(articolo);
    }
  
    /**
    * Cerca tutti gli articoli usati nel Database visualizzabili dall'utente 
    * @return List<ArticoloUsato> lista degli articoli usati trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloUsato> cercaArticoliUsati(){
        return articoloUsatoFacade.getArticoliUsati();
    }
    
    /**
    * Cerca tutti gli articoli usati nel Database
    * @return List<ArticoloUsato> lista degli articoli usati trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloUsato> cercaArticoliUsatiAdmin(){
        return articoloUsatoFacade.findAll();
    }
    
    /**
    * Cerca la lista degli articoli usati ancora da confermare nel Database
    * @return List<ArticoloUsato> lista degli articoli usati trovati, altrimenti restituisce una lista vuota
    */ 
    @Override
    public List<ArticoloUsato> cercaArticoliUsatiDaConfermare(){
        return articoloUsatoFacade.getArticoliUsatiDaConfermare();
    }
    
}
